﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using MediaBrowser.IRepository;
using Moq;
using MediaBrowser.IServices;
using MediaBrowser.Services;
using MediaBrowser.Entities;

namespace MediaBrowser.Test.Services
{
    /// <summary>
    /// Description résumée pour MediaManagerTest
    /// </summary>
    [TestClass]
    public class MediaManagerTest
    {
        private Mock<IMediaRepository> mockRepository;
        private IMediaManager service;


        public MediaManagerTest()
        {
            //
            // TODO : ajoutez ici la logique du constructeur
            //
        }

        private TestContext testContextInstance;

        /// <summary>
        ///Obtient ou définit le contexte de test qui fournit
        ///des informations sur la série de tests active ainsi que ses fonctionnalités.
        ///</summary>
        public TestContext TestContext
        {
            get
            {
                return testContextInstance;
            }
            set
            {
                testContextInstance = value;
            }
        }

        #region Attributs de tests supplémentaires
        //
        // Vous pouvez utiliser les attributs supplémentaires suivants lorsque vous écrivez vos tests :
        //
        // Utilisez ClassInitialize pour exécuter du code avant d'exécuter le premier test de la classe
        // [ClassInitialize()]
        // public static void MyClassInitialize(TestContext testContext) { }
        //
        // Utilisez ClassCleanup pour exécuter du code une fois que tous les tests d'une classe ont été exécutés
        // [ClassCleanup()]
        // public static void MyClassCleanup() { }
        //
        [TestInitialize]
        public void Initialize()
        {
            mockRepository = new Mock<IMediaRepository>();
            service = new MediaManager(mockRepository.Object);
        }
        // Utilisez TestCleanup pour exécuter du code après que chaque test a été exécuté
        // [TestCleanup()]
        // public void MyTestCleanup() { }
        //
        #endregion

        [TestMethod]
        public void ListMedias()
        {
            List<Media> l = new List<Media>();
            l.Add(new Media(1, "Name", DateTime.Now, "Description", null, "", ""));
            mockRepository.Setup(u => u.ListMediasByCategory(1)).Returns(l);
            var media = service.ListMediasByCategory(1);
            Assert.AreEqual(media.Count(), 1);

            media = service.ListMediasByCategory(2);
            Assert.AreEqual(media.Count(), 0);
        }

        [TestMethod]
        [ExpectedException(typeof(ArgumentNullException))]
        public void UpdateMedia()
        {
            mockRepository.Setup(u => u.UpdateMedia(null)).Returns(true);
            service.UpdateMedia(null);
        }
    }
}
